/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.jjsoft.disco.gco.ngc;

import com.jjsoft.disco.gco.dao.GenericController;
import com.jjsoft.disco.gco.mdl.Ingrediente;
import com.jjsoft.disco.gco.mdl.Producto;
import com.jjsoft.disco.gco.util.AtributoInvalidoException;
import com.jjsoft.disco.gco.util.CoctelValidadorException;
import com.jjsoft.disco.gco.util.IdDuplicadoException;
import com.jjsoft.disco.gco.util.ValidarAtributoUtil;
import java.util.List;

/**
 *
 * @author Johnny
 */
public class CoctelManager {
    GenericController<Producto> controladorProducto = new GenericController<Producto>();
    public void crearCoctel(Producto producto, List<Ingrediente> listaIngredientes) throws CoctelValidadorException
    {
        try {
            ValidarAtributoUtil.validarObjetoNulo("Producto", producto);
            ValidarAtributoUtil.validarStringNuloVacio("Código", producto.getCodigo());
            ValidarAtributoUtil.validarStringNuloVacio("Nombre", producto.getDescripcion());
            ValidarAtributoUtil.validarDoubleNegativo("P. Venta", producto.getPrecioVenta());
            if(listaIngredientes!=null && !listaIngredientes.isEmpty())
            {
                //GenericController<Ingrediente> controladorIngrediente = new GenericController<Ingrediente>();
                for(int i=0; i< listaIngredientes.size();i++)
                {
                   listaIngredientes.get(i).setIdProducto(producto);
                  // controladorIngrediente.create(listaIngredientes.get(i));
                }
            }
            producto.setIngredienteList(listaIngredientes);
            if(controladorProducto.create(producto).equals("1"))
            {
                throw new CoctelValidadorException(new IdDuplicadoException("Ya existe un producto con ese código",producto.getCodigo()));
            }
            
        } catch (AtributoInvalidoException ex) {
            throw new CoctelValidadorException(ex);
        }
        catch (Exception ex)
        {
            throw new CoctelValidadorException("Error Desconocido "+ ex.getLocalizedMessage());
        }
        
    }
    public void editarCoctel(Producto producto, List<Ingrediente> listaIngredientes) throws CoctelValidadorException
    {
        try {
            ValidarAtributoUtil.validarObjetoNulo("Producto", producto);
            ValidarAtributoUtil.validarStringNuloVacio("Código", producto.getCodigo());
            ValidarAtributoUtil.validarStringNuloVacio("Nombre", producto.getDescripcion());
            ValidarAtributoUtil.validarDoubleNegativo("P. Venta", producto.getPrecioVenta());
            GenericController<Ingrediente> controladorIngrediente = new GenericController<Ingrediente>();
            for(int i=0; i< producto.getIngredienteList1().size();i++)
                {
                   controladorIngrediente.destroy(new Ingrediente(), producto.getIngredienteList1().get(i).getIdIngrediente());
                }
            if(listaIngredientes!=null && !listaIngredientes.isEmpty())
            {
                
                for(int i=0; i< listaIngredientes.size();i++)
                {
                   listaIngredientes.get(i).setIdProducto(producto);                  
                }
            }
            producto.setIngredienteList(listaIngredientes);
            producto.setIngredienteList1(null);
            controladorProducto.edit(producto);
            
        } catch (AtributoInvalidoException ex) {
            throw new CoctelValidadorException(ex);
        }
        catch (Exception ex)
        {
            throw new CoctelValidadorException("Error Desconocido "+ ex.getLocalizedMessage());
        }
        
    }
    /*public void editarProducto(Producto producto,List<Proveedor> proveedores) throws ProductoValidadorException
    {
        try {
            ValidarAtributoUtil.validarObjetoNulo("Producto", producto);
            ValidarAtributoUtil.validarStringNuloVacio("Código", producto.getCodigo());
            ValidarAtributoUtil.validarStringNuloVacio("Descripción", producto.getDescripcion());
            ValidarAtributoUtil.validarDoubleNegativo("P. Venta", producto.getPrecioVenta());
            ValidarAtributoUtil.validarDoubleNegativo("Categoria", producto.getIdCategoria().getIdCategoria());
            controladorProducto.edit(producto);
            GenericController<Proveedorproducto> controladorPP = new GenericController<Proveedorproducto>();
                for(int i=0;i<producto.getProveedorproductoList().size();i++)
                {
                    controladorPP.destroy(new Proveedorproducto(), producto.getProveedorproductoList().get(i).getIdproveedorProducto());
                }
            if(proveedores!=null && !proveedores.isEmpty())
            {
                
                for(int i=0; i< proveedores.size();i++)
                {
                   Proveedorproducto agregar= new Proveedorproducto();
                   agregar.setIdProducto(producto);
                   agregar.setIdProveedor(proveedores.get(i));
                   controladorPP.create(agregar);
                }
                
            }
        } catch (AtributoInvalidoException ex) {
            throw new ProductoValidadorException(ex);
        }
        catch (Exception ex)
        {
            throw new ProductoValidadorException("Error Desconocido "+ ex.getLocalizedMessage());
        }
    }
    public List<Producto> listarProductos()
    {
        return controladorProducto.findWhere(new Producto(), "Estado=0");
    }
    
    public List<Producto> listarProductos(String criterio)
    {
        List<Producto> listaProducto=controladorProducto.findHibernateSearch(new Producto(),criterio, "Codigo", "Descripcion");
        for(int i=listaProducto.size();i>0;i--)
        {
            if(listaProducto.get(i-1).getEstado()==1)
                listaProducto.remove(i-1);
        }
        return listaProducto;
    }
    
    public void eliminarProducto(Producto producto)
    {
        producto.setEstado(1);
        try {
            controladorProducto.edit(producto);
        } catch (Exception ex) {
             
        } 
    }*/
}
